package com.zhangj.queue.aunular;

/**
 * @ClassName AunularQueue
 * @Description
 * @Author zhangjie
 * @Date 2022/1/13 10:51
 * @Version 1.0
 */

public class AunularQueue {

    //这里为了方便我们固定长度为4,且为一个数字数组,实际这个队列只可以放三个元素
    private int[] queue = new int[4];
    //指向队列第一个元素
    private int front = 0;
    //指向队列最后一个元素的后一个元素,这样做的目的是预留一个元素作为判断是否满还是空的依据
    private int rear = 0;
    //表示队列的最大容量
    private int maxSize = 4;


    //判断是否为空的方法,我们维护数据是取出还是查看就通过rear与front是否加1
    public boolean isEmpty() {
        return rear == front;
    }

    //判断是否满了,这里取下一个节点,在模最大值,即通过添加元素下标判断
    public boolean isFull() {
        return (rear + 1) % maxSize == front;
    }

    //添加方法,这里本来要判断是否初始化了-->通过maxSize
    public void add(int num) {
        if (this.isFull()) {
            System.out.println("队列已满");
            return;
        }

        queue[rear] = num;
        rear = (rear + 1) % maxSize;
    }



    //取一个元素方法,这里并不提供取出固定下标的方法,这可以从尾部取,依旧不做判空
    public int getElement() {
        int a = queue[front];

        front = (front + 1)%maxSize;
        return a;
    }

    //查看所有的方法,这里就做打印处理了
    public void getAll() {
        for (int i : queue) {
            System.out.println("queue = " + i);
        }
    }
}


